1. Field
The present disclosure relates generally to computer-generated animation and, more specifically, to evaluating a dependency graph having one or more temporally dependent variables.
2. Related Art
Media productions typically use dependency graphs to render, animate, or otherwise describe a scene in an animation. These dependency graphs may be made up of interconnected nodes, each of which may be a standalone computation unit that takes in data via one or more input attributes, performs some computation on the data, and produces one or more output attributes. The edges connecting nodes in the graph may represent data flowing from one node to the next, with each node performing some computation on the data it receives to generate its output. A node may have any number of inputs and any number of outputs, as well as other attributes. By varying the input attributes that feed into the nodes, an animator can control the motion, location, and other visual effects of an object or a scene.
As media productions create more realistic animations, the complexity and the number of nodes in the dependency graphs used to support these animations also increases. For example, the graph describing a character may become larger and more complex as the character is enhanced to include visual elements and movements that are more realistic. It is not uncommon for a dependency graph having thousands of nodes to be used to animate a single frame of an animated film. As such, the time and computing resources required to process these dependency graphs can be considerable.
These processing delays can be particularly expensive and problematic during production. For example, a dependency graph for a shot may include thousands of nodes representing the characters and other assets that are to be displayed in the shot. An animator may configure the inputs to various nodes within the dependency graph to cause the character to move in a desired manner. Once the inputs are configured, the graph may be evaluated to determine the outputs of the dependency graph for a certain number of frames. Depending on the number of frames being calculated, the animator may be required to wait a significant length of time before the output of the dependency graph becomes available. The animator may then review the resulting images to determine if the inputs provided to the dependency graph produced the desired result. If the animator is not satisfied with the result, the animator may modify the inputs to the dependency graph and the graph may again be evaluated. This iterative process may be performed hundreds of times or more until a desired output is obtained.
The processing delays may be even more problematic when the graph includes nodes that depend on the output of other nodes at different times. For example, a node configured to determine how much a wheel should rotate may receive the horizontal position of the wheel from the previous frame and the horizontal position of the wheel in the present frame as inputs. Calculations may then be performed based on the linear distance traveled and the radius of the wheel to determine the wheel's rotation. Thus, these temporally dependent nodes may depend on both the outputs of nodes within the graph, as well as outputs of nodes within the graph from different frames. Unfortunately, conventional animation systems have no way of tracking these temporal dependencies. As a result, if an animator changes an input value for any node within the dependency graph, the graph must be evaluated from the first frame of the shot to the desired frame. For example, if the animator only changes an input at frame 70 of a shot spanning from frames 0-100, to evaluate the 71st frame, the graph may be required to be evaluated for frames 0-71.